2.18 Arrays (Datenfelder)
 
Im ersten Kapitel wurde beschrieben, was eine Variable ist und wie ein Wert an sie übergeben wird. Es stellt sich dabei die Frage, was zu tun ist, wenn viele Werte gespeichert werden sollen. Nicht nur, dass sehr viele Variablen deklariert werden müssten - manchmal weiß man zu Beginn eines Programms nicht, wie viele Variablen benötigt werden. Beispielsweise, wenn Dateinamen eines Ordners ausgelesen werden.
2.18.1 Eindimensionale Arrays
 
Wird eine Variable von Typ String so deklariert:
Dim strName As String
so wird ein Array (oder Datenfeld) folgendermaßen deklariert:
Dim strJahreszeiten(3) As String
Die Vermutung ist korrekt: Die Zählung beginnt bei 0! Gefüllt wird das Datenfeld so:
strJahreszeiten(0) = "Frühling"
strJahreszeiten(1) = "Sommer"
strJahreszeiten(2) = "Herbst"
strJahreszeiten(3) = "Winter"
Übrigens könnte man auch hier - wie bei den Variablen - die Werte bei der Deklaration füllen:
Dim strJahreszeiten(3) As String = _
{"Frühling", "Sommer", "Herbst", "Winter"}
Wollte man noch einen weiteren Eintrag hinzufügen, so könnte man es mit:
ReDim strJahreszeiten(4)
Aber Achtung! Dadurch werden die anderen Werte gelöscht. Sollen sie erhalten bleiben, dann muss geschrieben werden:
ReDim Preserve strJahreszeiten(4)
Bei der Deklaration muss übrigens gar nicht angegeben werden, wie viele Werte das Array speichern soll:
Dim strListe()
ReDim Preserve strListe(4)
Das Preserve ist an dieser Stelle überflüssig. Im folgenden Beispiel allerdings nicht:
Dim strListe()
ReDim strListe(3)
strListe(0) = "Nord"
strListe(1) = "Süd"
strListe(2) = "Ost"
strListe(3) = "West"
ReDim Preserve strListe(4)
strListe(4) = "Mitte"
Nun gibt es allerdings einige Funktionen, die ein Array füllen, ohne dass bekannt ist, welches die Obergrenze ist. Die Eigenschaft Length ermittelt sie. Im oberen Beispiel könnte die Liste folgendermaßen ausgelesen werden:
Dim i As Integer
For i = 0 To strListe.Length -1
MessageBox.Show(strListe(i))
Next
Achtung: Length ermittelt die Anzahl der Elemente. Da die Zählung allerdings bei 0 beginnt, muss die Schleife bis Length -1 hochzählen. Das folgende Beispiel verdeutlicht dies. Die Objektvariable objDateien wird als Array deklariert, dessen Anzahl der Elemente unbekannt ist. GetFiles füllt das Datenfeld. Dann können alle Elemente durchlaufen und verarbeitet werden:
Dim i As Integer
Dim objDateien() As System.IO.DirectoryInfo
objDateien = New DirectoryInfo("C:\Eigene Dateien"). _
GetFiles()
For i = 0 To objDateien.Length - 1
MessageBox.Show(ObjDateien(i).ToString)
Next
Übrigens könnte man die Obergrenze auch mit
objDateien.GetUpperBound(0)
bestimmen. Der Parameter 0 ist nötig, da es auch mehrdimensionale Arrays gibt. Er kennzeichnet, dass objDateien von der Dimension 1 ist.
2.18.2 Mehrdimensionale Arrays
 
Ein Array muss nicht nur eine Dimension haben, sondern kann auch mehrdimensional sein, theoretisch beliebig groß - in der Praxis kommen allerdings mehr als drei Dimensionen sehr selten vor. Ein zweidimensionales Array wird folgendermaßen deklariert:
Dim strNamen(1, 2) As String
Es kann dann wie folgt gefüllt werden:
strNamen(0, 0) = "Hans"
strNamen(0, 1) = "Clawdia"
strNamen(0, 2) = "Joachim"
strNamen(1, 0) = "Castorp"
strNamen(1, 1) = "Chauchat"
strNamen(1, 2) = "Ziemsen"
Solche Datenfelder kann man sich wie ein Schachbrett vorstellen - auf der einen Seite läuft ein Zähler von 0 bis 1, auf der anderen von 0 bis 2. Somit ergibt sich schnell eine große Anzahl von Variablen, die gefüllt werden können. Ausgelesen werden die Datenfelder normalerweise über Schleifen.
Ein Array kann mit Erase wieder geleert werden:
Erase strNamen
Das Gleiche leistet auch die Methode Clear.
Die folgende Tabelle zeigt die wichtigsten Methoden und Eigenschaften der Arrays:
Tabelle 2.1
Die wichtigsten Methoden der Datenfelder
| Methode/Eigenschaft
|
Beschreibung
|
| Length
|
Die Anzahl der Elemente eines eindimensionalen Arrays
|
| Rank
|
Die Gesamtzahl der Dimensionen
|
| Clear
|
leert die Datenfelder eines Arrays
|
| Sort
|
sortiert die Datenfelder
|
| Reverse
|
kehrt die Reihenfolge der Elemente um
|
| IndexOf
|
sucht nach dem Element und gibt den Index zurück
|
| GetUpperBound
|
gibt die Obergrenze an.
|
| GetLowerBound
|
gibt die Untergrenze an (in der Regel 0)
|
| GetLength
|
gibt die Anzahl der Elemente an
|
| Copy
|
kopiert die Elemente von einem Array in einen anderen
|
| CopyTo
|
kopiert die Elemente von einem eindimensionalen Array in einen anderen
|
|